package DataStructure.BinaryTreePra;

/**
 * @time: 2021/12/14/014 10:41
 * @author: Zhurunhe
 * @Version：1
 */
public class BinaryTree {
    private Node node;

    public void setNode(Node node) {
        this.node = node;
    }

    public void printPreorderTraversal() {
        if (this.node != null) {
            System.out.println("前序遍历：先输出父子节点，在遍历左子树和右子树");
            this.node.preorderTraversal();
        } else {
            System.out.println("二叉树为空，不能进行前序遍历");
        }
    }

    public void preorderTraversalSearch(int no) {
        if (this.node != null) {
            System.out.println("前序遍历查找-------");
            Node resNode = this.node.preorderTraversalSearch(no);
            System.out.println(resNode == null ? "没有找到对应的队员" : resNode);
        } else {
            System.out.println("二叉树为空，不能进行前序遍历查找");
        }
    }

    public void printInorderTraversal() {
        if (this.node != null) {
            System.out.println("中序遍历:先遍历左子树，再输出父节点，最后遍历右子树");
            this.node.inorderTraversal();
        } else {
            System.out.println("二叉树为空，不能进行中序遍历");
        }
    }

    public void inorderTraversalSearch(int no) {
        if (this.node != null) {
            System.out.println("中序遍历查找-------");
            Node resNode = this.node.inorderTraversalSearch(no);
            System.out.println(resNode == null ? "没有找到对应的队员" : resNode);
        } else {
            System.out.println("二叉树为空，不能进行中序遍历查找");
        }
    }


    public void printPostorderTraversal() {
        if (this.node != null) {
            System.out.println("后序遍历：先遍历左子树，再遍历右子树，最后数据父节点");
            this.node.postorderTraversal();
        } else {
            System.out.println("二叉树为空，不能进行后序遍历");
        }
    }

    public void postorderTraversalSearch(int no) {
        if (this.node != null) {
            System.out.println("后序遍历查找-------");
            Node resNode = this.node.postorderTraversalSearch(no);
            System.out.println(resNode == null ? "没有找到对应的队员" : resNode);
        } else {
            System.out.println("二叉树为空，不能进行后序遍历查找");
        }
    }

    public void removeNode(int no) {
        if (this.node != null && (this.node.getLeft() != null && this.node.getRight() != null)) {
            if (node.getNo() == no) {
                node = null;
                System.out.println("删除成功，已无根节点");
            } else {
                this.node.removeNode(no);
                System.out.println("删除节点后的二叉树");
                this.node.preorderTraversal();
            }

        } else {
            System.out.println("无法进行删除元素");
        }
    }

}
